using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using TestImport.Printen;

namespace TestImport.LeerlingRekeningen
{
    public partial class RekeningenBeheren : Form
    {
        private String filterTekstSoortTotaal = "";
        private string filterTekstSoort = "";
        private string filterTekstSoort1 = "";
        private string filterTekstSoort2 = "";
        private string rekeningTekst = "";
        private DataGridViewCellStyle dataGridViewCellStyle = new DataGridViewCellStyle();
        private DataGridViewCellStyle dataGridViewCellStyle2 = new DataGridViewCellStyle();
        public RekeningenBeheren()
        {
            InitializeComponent();
            btnFaktuurIsBerekend.BackColor = Color.Pink;
            btnFaktuurIsBerekend.ForeColor = System.Drawing.Color.DeepPink;
            chkVerschilInBedrag.BackColor = Color.Pink;
            chkVerschilInBedrag.ForeColor = System.Drawing.Color.DeepPink;
            nudAantalExemplaren.Value = InstParameters.Default.vPrintRekeningAantal;
            if (InstParameters.Default.vPrintRekeningGroepOpVak) rbtPerVak.Checked = true;
            else rbtPerHuur.Checked = true;
            this.BackColor = InstParameters.Default.schermkleur;
            pnlPrinten.Enabled = false;
            rbtAlle.Checked = true;
            rbtRekEnRetour.Checked = true;
            gbFilter.Text = "ALLE REKENINGEN/RETOURS VOOR ALLE LEERLINGEN";
            dataGridViewCellStyle.BackColor = System.Drawing.Color.LightGray;
            dataGridViewCellStyle.ForeColor = System.Drawing.Color.Red;
            //dataGridViewCellStyle.SelectionBackColor = System.Drawing.SystemColors.Highlight;
            //dataGridViewCellStyle.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
            //dataGridViewCellStyle.WrapMode = System.Windows.Forms.DataGridViewTriState.False;

            dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
            dataGridViewCellStyle2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
        }

        private void RekeningenBeheren_Load(object sender, EventArgs e)
        {
            this.leerlingTableAdapter.Fill(this.onsBoekenPakketDataSet.Leerling);
            this.groepTableAdapter.Fill(this.onsBoekenPakketDataSet.Groep);
            this.leerlingBoekBestelling_BoekTableAdapter.Fill(this.onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek);
            this.rekeningLeerlingTableAdapter.Fill(this.onsBoekenPakketDataSet.RekeningLeerling);
            vulKolomBerekendBedragEnFormateer();
            rekeningLeerlingBindingSource.Sort = "rekeningID desc";
            

        }

        private void vulKolomBerekendBedragEnFormateer()
        {
            leerlingBoekBestelling_BoekBindingSource.RemoveFilter();
            DataView dv2 = rekeningLeerlingBindingSource.List as DataView;
            DataView dv = leerlingBoekBestelling_BoekBindingSource.List as DataView;
            dv.Sort = "rekeningID";
            int vRekeningNr = 0;
            decimal vTotaal = 0;
            bool vHuurboek = false;
            bool isRetour = false;
            DataRowView drv = null;
            for (int i = 0; i < dgvRekening.Rows.Count; i++)
            {
                vTotaal = 0;
                vHuurboek = false;
                vRekeningNr = int.Parse(dgvRekening.Rows[i].Cells["dgvRekeningID"].Value.ToString());
                isRetour = (decimal.Parse(dgvRekening.Rows[i].Cells["dgvBedrag"].Value.ToString()) < 0);
                if (isRetour)
                {
                    dgvRekening.Rows[i].DefaultCellStyle = dataGridViewCellStyle;
                    dgvRekening.Rows[i].Cells["dgvBerekendBedrag"].Value = "";
                }
                else
                {
                    int start = dv.Find(vRekeningNr);
                    if (start >= 0)
                    {
                        while (start < dv.Count)
                        {
                            drv = dv[start];
                            if (int.Parse(drv["rekeningID"].ToString()) != vRekeningNr)
                                break;
                            else
                            {
                                vHuurboek = bool.Parse(drv["huurboek"].ToString());
                                if (vHuurboek)
                                    vTotaal += decimal.Parse(drv["huurPrijs"].ToString());
                                else
                                    vTotaal += decimal.Parse(drv["schoolPrijs"].ToString());
                            }
                            start++;
                        }
                    }
                    try
                    {
                        dv2[i]["berekendTotaal"] = decimal.Parse(vTotaal.ToString().Substring(0, vTotaal.ToString().Length - 1));
                        dv2[i].EndEdit();
                    }
                    catch (Exception) { }
                   /*
                    try
                    {
                        if (decimal.Parse(dv2[i]["berekendTotaal"].ToString()) > 0 &&
                            decimal.Parse(dv2[i]["berekendTotaal"].ToString()) != decimal.Parse(dv2[i]["totaal"].ToString()))
                            dgvRekening.Rows[i].Cells["dgvBedrag"].Style = dataGridViewCellStyle2;
                    }
                    catch (Exception){;}
                   */
                }
            }
            dgvRekening_SelectionChanged(null, null);
        }

        private void dgvRekening_SelectionChanged(object sender, EventArgs e)
        {
            int vRekeningID = 0;
            try
            {
                vRekeningID = int.Parse(dgvRekening.CurrentRow.Cells["dgvRekeningID"].Value.ToString());
                if (decimal.Parse(dgvRekening.CurrentRow.Cells["dgvBedrag"].Value.ToString()) > 0)
                    leerlingBoekBestelling_BoekBindingSource.Filter = "rekeningID = " + vRekeningID;
                else
                    leerlingBoekBestelling_BoekBindingSource.Filter = "rekeningRetourID = " + vRekeningID;

            }
            catch (Exception ex) { ;}
            if (rekeningLeerlingBindingSource.Count == 0) leerlingBoekBestelling_BoekBindingSource.Filter = "rekeningID < 0"; ;

        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            pnlPrinten.Enabled = true;
            btnPrint.Enabled = false;
        }

        private void btnPrintAnnuleer_Click(object sender, EventArgs e)
        {
            pnlPrinten.Enabled = false;
            nudAantalExemplaren.Value = 1;
            btnPrint.Enabled = true;
        }

        private void btnPrintStart_Click(object sender, EventArgs e)
        {
            List<int> lijst = new List<int>();
            DataGridViewSelectedRowCollection sel = dgvRekening.SelectedRows;
            if (sel.Count > 0)
            {
                foreach (DataGridViewRow rij in sel)
                {
                    lijst.Add(int.Parse(rij.Cells["dgvRekeningID"].Value.ToString()));
                }
            }
            else
            {
                int vReknr = int.Parse(dgvRekening.CurrentRow.Cells["dgvRekeningID"].Value.ToString());
                lijst.Add(vReknr);
            }
            bool perVak = rbtPerVak.Checked;
            string printtekst = "Druk de geselecteerde rekening af?";
            if (sel.Count > 1)
                printtekst = "Druk de "+sel.Count+" geselecteerde rekeningen af?";
            DialogResult antwoord = MessageBox.Show(printtekst, "Afdrukken rekening(en)", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (antwoord == DialogResult.Yes)
            {
                PrintenRekening p = new PrintenRekening(lijst, "", DateTime.Now, int.Parse(nudAantalExemplaren.Value.ToString()), perVak);
                p.printRekeningen();
            }
            pnlPrinten.Enabled = false;
            btnPrint.Enabled = true;
        }

        private void txtLeerling_TextChanged(object sender, EventArgs e)
        {
            try
            {
                String text = txtLeerling.Text.Replace("\'", "\'\'");
                String filterTekst = "naam like \'%" + (text + "%\'");
                if (rbtAlle.Checked)
                    filterTekst = "naam like \'%" + (text + "%\' AND rekeningID > 0");
                if (rbtBetaald.Checked)
                    filterTekst = "naam like \'%" + (text + "%\' AND betaald = totaal");
                if (rbtNietBetaald.Checked)
                    filterTekst = "naam like \'%" + (text + "%\' AND betaald < totaal");
                if (rbtRekening.Checked)
                    filterTekst += " AND totaal >= 0";
                if (rbtRekeningRetour.Checked)
                    filterTekst += " AND totaal < 0";
                if (chkVerschilInBedrag.Checked)
                    filterTekst += " AND totaal <> berekendTotaal";
                rekeningLeerlingBindingSource.Filter = filterTekst;
                filterTekstSoortTotaal = filterTekstSoort + " / " + filterTekstSoort1 + " / " + filterTekstSoort2;
                this.gbFilter.Text = filterTekstSoortTotaal + " /leerlingen " + text.ToUpper();
                zetKleurenVoorRetours();
            }
            catch (Exception) { ;}
        }

        private void rbtAlle_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtAlle.Checked) filterTekstSoort = "BETAALD + NIET BETAALD";
        }

        private void rbtBetaald_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtBetaald.Checked) filterTekstSoort = "BETAALD";
        }

        private void rbtNietBetaald_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtNietBetaald.Checked) filterTekstSoort = " NIET (VOLLEDIG) BETAALD";
        }

        private void rbtRekening_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtRekening.Checked) filterTekstSoort1 = "REKENINGEN";
        }

        private void rbtRekeningRetour_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtRekeningRetour.Checked) filterTekstSoort1 = "REKENINGEN RETOUR";
        }

        private void rbtRekEnRetour_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtRekEnRetour.Checked) filterTekstSoort1 = "REKENINGEN + REKENINGEN RETOUR";
        }

        private void chkVerschilInBedrag_CheckedChanged(object sender, EventArgs e)
        {
            if (chkVerschilInBedrag.Checked) filterTekstSoort2 = "FAKTUURBEDRAG # BEREKEND BEDRAG";
            else filterTekstSoort2 = "";
        }

        private void btnAlleRekeningen_Click(object sender, EventArgs e)
        {
            String filterTekst = "";
            rekeningLeerlingBindingSource.RemoveFilter();
            if (rbtAlle.Checked)
                filterTekst = "rekeningID > 0";
            if (rbtBetaald.Checked)
                filterTekst = "betaald = totaal";
            if (rbtNietBetaald.Checked)
                filterTekst = "betaald < totaal";
            if (rbtRekening.Checked)
                filterTekst += " AND totaal >= 0";
            if (rbtRekeningRetour.Checked)
                filterTekst += " AND totaal < 0";
            if (chkVerschilInBedrag.Checked)
                filterTekst += " AND totaal <> berekendTotaal";
            //Text = filterTekst;
            rekeningLeerlingBindingSource.Filter = filterTekst;
            filterTekstSoortTotaal = filterTekstSoort + " / " + filterTekstSoort1 + " / " + filterTekstSoort2;
            this.gbFilter.Text = filterTekstSoortTotaal + " VOOR ALLE LEERLINGEN";
            // kleuren aanpassen
            zetKleurenVoorRetours();
            
        }

        private void btnFilterGroep_Click(object sender, EventArgs e)
        {
            try
            {
                string code = cmbGroep.SelectedValue.ToString();
                String filterTekst = "groepCode = " + "'" + code + "'";
                if (rbtAlle.Checked)
                    filterTekst = "groepCode = " + "'" + code + "'" + " AND rekeningID > 0";
                if (rbtBetaald.Checked)
                    filterTekst = "groepCode = " + "'" + code + "'"+ " AND betaald = totaal";
                if (rbtNietBetaald.Checked)
                    filterTekst = "groepCode = " + "'" + code + "'" + " AND betaald < totaal";
                if (rbtRekening.Checked)
                    filterTekst += " AND totaal >= 0";
                if (rbtRekeningRetour.Checked)
                    filterTekst += " AND totaal < 0";
                if (chkVerschilInBedrag.Checked)
                    filterTekst += " AND totaal <> berekendTotaal";
                rekeningLeerlingBindingSource.Filter = filterTekst;
                filterTekstSoortTotaal = filterTekstSoort + " / " + filterTekstSoort1 + " / " + filterTekstSoort2;
                gbFilter.Text = filterTekstSoortTotaal+" /Leerlingen van groep " + code.ToUpper();
                zetKleurenVoorRetours();
            }
            catch (Exception ex) { ;}
        }

        private void bntFilterLeerling_Click(object sender, EventArgs e)
        {
            try
            {
                string code = cmbLeerling.SelectedValue.ToString();
                String filterTekst = "leerlingID = " + "'" + code + "'";
                if (rbtAlle.Checked)
                    filterTekst = "leerlingID = " + "'" + code + "'" + " AND rekeningID > 0";
                if (rbtBetaald.Checked)
                    filterTekst = "leerlingID = " + "'" + code + "'" + " AND betaald = totaal";
                if (rbtNietBetaald.Checked)
                    filterTekst = "leerlingID = " + "'" + code + "'" + " AND betaald < totaal";
                if (rbtRekening.Checked)
                    filterTekst += " AND totaal >= 0";
                if (rbtRekeningRetour.Checked)
                    filterTekst += " AND totaal < 0";
                if (chkVerschilInBedrag.Checked)
                    filterTekst += " AND totaal <> berekendTotaal";
                rekeningLeerlingBindingSource.Filter = filterTekst;
                filterTekstSoortTotaal = filterTekstSoort + " / " + filterTekstSoort1 + " / " + filterTekstSoort2;
                gbFilter.Text = filterTekstSoortTotaal + " /Leerling " + cmbLeerling.Text.ToUpper();
                zetKleurenVoorRetours();
            }
            catch (Exception ex) { ;}
        }

        private void btnBetalingVolledig_Click(object sender, EventArgs e)
        {
            List<int> lijst = new List<int>();
            DataGridViewSelectedRowCollection sel = dgvRekening.SelectedRows;
            
            bool perVak = rbtPerVak.Checked;
            maakRekeningTekst();
            string printtekst = "Registreer volledige betaling voor de geselecteerde rekening?"+Environment.NewLine+
                                rekeningTekst;
            if (sel.Count > 1)
                printtekst = "Registreer de volledige betaling van de  " + sel.Count + " geselecteerde rekeningen?";
            DialogResult antwoord = MessageBox.Show(printtekst, "Registreer volledige betaling", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (antwoord == DialogResult.Yes)
            {
                if (sel.Count > 0)
                {
                    //int index = 0;
                    foreach (DataGridViewRow rij in sel)
                    {
                        //index = rij.Index;
                        DataRowView dr = rij.DataBoundItem as DataRowView;
                        //DataRow dr = onsBoekenPakketDataSet.Tables["RekeningLeerling"].Rows[index];
                        dr["betaald"]= dr["totaal"];
                        dr.EndEdit();
                        int vRekeningID = int.Parse(dr["rekeningID"].ToString());
                        rekeningLeerlingTableAdapter.UpdateBetaaldBedrag(decimal.Parse(dr["betaald"].ToString()), vRekeningID);
                    }
                }
                else
                {
                    //int index = dgvRekening.CurrentRow.Index;
                    DataRowView dr = dgvRekening.CurrentRow.DataBoundItem as DataRowView;
                    //DataRow dr = onsBoekenPakketDataSet.Tables["RekeningLeerling"].Rows[index];
                    dr["betaald"] = dr["totaal"];
                    dr.EndEdit();
                    int vRekeningID = int.Parse(dr["rekeningID"].ToString());
                    rekeningLeerlingTableAdapter.UpdateBetaaldBedrag(decimal.Parse(dr["betaald"].ToString()), vRekeningID);
                    
                }
            }
        }

        private void maakRekeningTekst()
        {
            try
            {
                string res = "";
                //int index = dgvRekening.CurrentRow.Index;
                DataRowView dr = dgvRekening.CurrentRow.DataBoundItem as DataRowView;
                //DataRow dr = onsBoekenPakketDataSet.Tables["RekeningLeerling"].Rows[index];
                res = "Totaal bedrag van rekening van " + dr["naam"] + ": " + afkappen(dr["totaal"].ToString(),1) + Environment.NewLine +
                     "Reeds betaald: " + afkappen(dr["betaald"].ToString(),1) + Environment.NewLine +
                     "Saldo NOG TE BETALEN: " + afkappen(((decimal.Parse(dr["totaal"].ToString()) - decimal.Parse(dr["betaald"].ToString())).ToString()),1);
                rekeningTekst = res;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); rekeningTekst = ""; }
        }

        private string afkappen(string tekst, int aantal)
        {
            if (tekst.Length > aantal)
                return tekst.Remove(tekst.Length - aantal );
            return tekst;
        }

        private void btnBetaling_Click(object sender, EventArgs e)
        {
            try
            {
                maakRekeningTekst();
                //int index = dgvRekening.CurrentRow.Index;
                //DataRow dr = onsBoekenPakketDataSet.Tables["RekeningLeerling"].Rows[index];
                DataRowView dr = dgvRekening.CurrentRow.DataBoundItem as DataRowView;
                BetalingCreatie betaling = new BetalingCreatie(this,rekeningTekst,decimal.Parse(dr["totaal"].ToString()),decimal.Parse(dr["betaald"].ToString()));
                betaling.ShowDialog();
            }
            catch (Exception) {;}
        }

        public void registreerBetaling(decimal bedrag)
        {
            //int index = dgvRekening.CurrentRow.Index;
            //DataRow dr = onsBoekenPakketDataSet.Tables["RekeningLeerling"].Rows[index];
            DataRowView dr = dgvRekening.CurrentRow.DataBoundItem as DataRowView;
            dr["betaald"] = decimal.Parse(dr["betaald"].ToString())+ bedrag;
            dr.EndEdit();
            int vRekeningID = int.Parse(dr["rekeningID"].ToString());
            rekeningLeerlingTableAdapter.UpdateBetaaldBedrag(decimal.Parse(dr["betaald"].ToString()), vRekeningID);

        }

        private void dgvRekening_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            //Dummy Laten staan
        }

        private void dgvRekening_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            bool formateer = false;
            decimal bedrag1 = 0;
            decimal bedrag2 = 0;
            string waarde = ""; 
            if (dgvRekening.Columns[e.ColumnIndex].Name == "dgvBedrag")
            {
                if (e.Value != null)
                {
                    waarde = e.Value.ToString();
                    waarde = waarde.Substring(0, waarde.Length - 1);
                    try
                    {
                        int rij = e.RowIndex;
                        int kolom = e.ColumnIndex;
                        bedrag1 = decimal.Parse(dgvRekening.Rows[rij].Cells["dgvBedrag"].Value.ToString());
                        bedrag2 = decimal.Parse(dgvRekening.Rows[rij].Cells["dgvBerekendBedrag"].Value.ToString());
                        if (bedrag1 != bedrag2)
                        {
                            formateer = true;
                        }
                        if (formateer)
                        {
                            e.FormattingApplied = true;
                            e.CellStyle.BackColor = Color.Pink;
                            e.CellStyle.ForeColor = System.Drawing.Color.DeepPink;
                            
                            e.Value = waarde;
                        }
                    }
                    catch (Exception ex) { }
                }
            }

        }

        private void btnFaktuurIsBerekend_Click(object sender, EventArgs e)
        {
            try
            {
                List<int> lijst = new List<int>();
                DataGridViewSelectedRowCollection sel = dgvRekening.SelectedRows;

                bool perVak = rbtPerVak.Checked;
                maakRekeningTekst();
                string printtekst = "Zet faktuurbedrag gelijk aan berekend bedrag voor de geselecteerde rekening?" + Environment.NewLine;

                if (sel.Count > 1)
                    printtekst = "Zet faktuurbedrag gelijk aan berekend bedrag voor  " + sel.Count + " geselecteerde rekeningen?";
                DialogResult antwoord = MessageBox.Show(printtekst, "Faktuurbedrag = berekend bedrag", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (antwoord == DialogResult.Yes)
                {
                    if (sel.Count > 0)
                    {
                        //int index = 0;
                        foreach (DataGridViewRow rij in sel)
                        {
                            //index = rij.Index;
                            DataRowView dr = rij.DataBoundItem as DataRowView;
                            //DataRow dr = onsBoekenPakketDataSet.Tables["RekeningLeerling"].Rows[index];
                            dr["totaal"] = dr["berekendTotaal"];
                            dr.EndEdit();
                            int vRekeningID = int.Parse(dr["rekeningID"].ToString());
                            rekeningLeerlingTableAdapter.UpdateFaktuurBedrag(decimal.Parse(dr["bedrag"].ToString()), vRekeningID);
                        }
                    }
                    else
                    {
                        //int index = dgvRekening.CurrentRow.Index;
                        DataRowView dr = dgvRekening.CurrentRow.DataBoundItem as DataRowView;
                        //DataRow dr = onsBoekenPakketDataSet.Tables["RekeningLeerling"].Rows[index];
                        dr["totaal"] = dr["berekendTotaal"];
                        dr.EndEdit();
                        int vRekeningID = int.Parse(dr["rekeningID"].ToString());
                        rekeningLeerlingTableAdapter.UpdateFaktuurBedrag(decimal.Parse(dr["totaal"].ToString()), vRekeningID);

                    }
                }
            }
            catch (Exception) { }
        }

        private void dgvRekening_Sorted(object sender, EventArgs e)
        {
            zetKleurenVoorRetours();
        }

        private void zetKleurenVoorRetours()
        {
            for (int i = 0; i < dgvRekening.Rows.Count; i++)
            {

                bool isRetour = (decimal.Parse(dgvRekening.Rows[i].Cells["dgvBedrag"].Value.ToString()) < 0);
                if (isRetour)
                {
                    dgvRekening.Rows[i].DefaultCellStyle = dataGridViewCellStyle;
                    dgvRekening.Rows[i].Cells["dgvBerekendBedrag"].Value = "";
                }
            }
        }

    }
}